Client and Subscriber Development > Development Models > Imperative Programming Model > Imperative Programming Model for OPC Classic A&E > Subscribing to Information (OPC A&E) > Specifying event filters (OPC A&E) |
Examples:
Filtering by category or categories:
// This example shows how to filter the events by their category. // // Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . using System; using System.Threading; using OpcLabs.EasyOpc.AlarmsAndEvents; using OpcLabs.EasyOpc.AlarmsAndEvents.OperationModel; using OpcLabs.EasyOpc.DataAccess; namespace DocExamples.AlarmsAndEvents._EasyAEClient { partial class SubscribeEvents { // Instantiate the OPC-A&E client object. static readonly EasyAEClient AEClient = new EasyAEClient(); // Instantiate the OPC-DA client object. static readonly EasyDAClient DAClient = new EasyDAClient(); public static void FilterByCategories() { var eventHandler = new EasyAENotificationEventHandler(AEClient_Notification_FilterByCategories); AEClient.Notification += eventHandler; Console.WriteLine("Processing event notifications..."); var subscriptionFilter = new AESubscriptionFilter { Categories = new long[] { 15531778 } }; // You can also filter using event types, severity, areas, and sources. int handle = AEClient.SubscribeEvents("", "OPCLabs.KitEventServer.2", 1000, null, subscriptionFilter); // Allow time for initial refresh Thread.Sleep(5 * 1000); // Set some events to active state. DAClient.WriteItemValue("", "OPCLabs.KitServer.2", "SimulateEvents.ConditionState1.Activate", true); DAClient.WriteItemValue("", "OPCLabs.KitServer.2", "SimulateEvents.ConditionState2.Activate", true); Thread.Sleep(10 * 1000); AEClient.UnsubscribeEvents(handle); AEClient.Notification -= eventHandler; } // Notification event handler static void AEClient_Notification_FilterByCategories(object sender, EasyAENotificationEventArgs e) { Console.WriteLine(); Console.WriteLine(e); if (!e.Succeeded) return; Console.WriteLine("Refresh: {0}", e.Refresh); Console.WriteLine("RefreshComplete: {0}", e.RefreshComplete); AEEventData eventData = e.EventData; if (!(eventData is null)) { Console.WriteLine("Event.CategoryId: {0}", eventData.CategoryId); Console.WriteLine("Event.QualifiedSourceName: {0}", eventData.QualifiedSourceName); Console.WriteLine("Event.Message: {0}", eventData.Message); Console.WriteLine("Event.Active: {0}", eventData.Active); Console.WriteLine("Event.Acknowledged: {0}", eventData.Acknowledged); } } } }
# This example shows how to filter the events by their category. # # Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . # OPC client and subscriber examples in Python on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-Python . # The QuickOPC package is needed. Install it using "pip install opclabs_quickopc". import opclabs_quickopc import time # Import .NET namespaces. from OpcLabs.EasyOpc import * from OpcLabs.EasyOpc.AlarmsAndEvents import * from OpcLabs.EasyOpc.DataAccess import * from OpcLabs.EasyOpc.OperationModel import * # Notification event handler def notification(sender, e): print() print(e) if not e.Succeeded: return print('Refresh: ', e.Refresh, sep='') print('RefreshComplete: ', e.RefreshComplete, sep='') eventData = e.EventData if eventData is not None: print('Event.CategoryId: ', eventData.CategoryId, sep='') print('Event.QualifiedSourceName: ', eventData.QualifiedSourceName, sep='') print('Event.Message: ', eventData.Message, sep='') print('Event.Active: ', eventData.Active, sep='') print('Event.Acknowledged: ', eventData.Acknowledged, sep='') # Instantiate the OPC-A&E client object. aeClient = EasyAEClient() # Instantiate the OPC-DA client object. daClient = EasyDAClient() # aeClient.Notification += notification print('Processing event notifications...') subscriptionFilter = AESubscriptionFilter() subscriptionFilter.Categories = [15531778] # You can also filter using event types, severity, areas, and sources. handle = IEasyAEClientExtension.SubscribeEvents(aeClient, '', 'OPCLabs.KitEventServer.2', 1000, None, subscriptionFilter) # Allow time for initial refresh. time.sleep(5) # Set some events to active state. try: IEasyDAClientExtension.WriteItemValue(daClient, '', 'OPCLabs.KitServer.2', 'SimulateEvents.ConditionState1.Activate', True) IEasyDAClientExtension.WriteItemValue(daClient, '', 'OPCLabs.KitServer.2', 'SimulateEvents.ConditionState2.Activate', True) except OpcException as opcException: print('*** Failure: ' + opcException.GetBaseException().Message) exit() time.sleep(10) aeClient.UnsubscribeEvents(handle) aeClient.Notification -= notification print('Finished.')
' This example shows how to filter the events by their category. ' ' Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . Imports System.Threading Imports OpcLabs.EasyOpc.AlarmsAndEvents Imports OpcLabs.EasyOpc.AlarmsAndEvents.OperationModel Imports OpcLabs.EasyOpc.DataAccess Namespace AlarmsAndEvents._EasyAEClient Partial Friend Class SubscribeEvents _ Private Shared ReadOnly AEClient As New EasyAEClient() _ Private Shared ReadOnly DAClient As New EasyDAClient() Public Shared Sub FilterByCategories() Dim eventHandler = New EasyAENotificationEventHandler(AddressOf AEClient_Notification_FilterByCategories) AddHandler AEClient.Notification, eventHandler Console.WriteLine("Processing event notifications...") Dim subscriptionFilter As New AESubscriptionFilter() With _ {.Categories = New Long() {15531778}} ' You can also filter using event types, severity, areas, and sources. Dim handle As Integer = AEClient.SubscribeEvents("", "OPCLabs.KitEventServer.2", Nothing, subscriptionFilter) ' Allow time for initial refresh Thread.Sleep(5 * 1000) ' Set some events to active state. DAClient.WriteItemValue("", "OPCLabs.KitServer.2", "SimulateEvents.ConditionState1.Activate", True) DAClient.WriteItemValue("", "OPCLabs.KitServer.2", "SimulateEvents.ConditionState2.Activate", True) Thread.Sleep(10 * 1000) AEClient.UnsubscribeEvents(handle) RemoveHandler AEClient.Notification, eventHandler End Sub ' Notification event handler Private Shared Sub AEClient_Notification_FilterByCategories(ByVal sender As Object, ByVal e As EasyAENotificationEventArgs) Console.WriteLine() Console.WriteLine(e) If Not e.Succeeded Then Exit Sub End If Console.WriteLine("Refresh: {0}", e.Refresh) Console.WriteLine("RefreshComplete: {0}", e.RefreshComplete) Dim eventData As AEEventData = e.EventData If e.EventData IsNot Nothing Then Console.WriteLine("Event.CategoryId: {0}", eventData.CategoryId) Console.WriteLine("Event.QualifiedSourceName: {0}", eventData.QualifiedSourceName) Console.WriteLine("Event.Message: {0}", eventData.Message) Console.WriteLine("Event.Active: {0}", eventData.Active) Console.WriteLine("Event.Acknowledged: {0}", eventData.Acknowledged) End If End Sub End Class End Namespace
Filtering by source or sources:
// This example shows how to set the filtering criteria to be used for the event subscription. // // Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . using System; using System.Threading; using OpcLabs.EasyOpc.AlarmsAndEvents; using OpcLabs.EasyOpc.AlarmsAndEvents.OperationModel; using OpcLabs.EasyOpc.DataAccess; using OpcLabs.EasyOpc.OperationModel; namespace DocExamples.AlarmsAndEvents._AESubscriptionFilter { class Properties { // Instantiate the OPC-A&E client object. static readonly EasyAEClient AEClient = new EasyAEClient(); // Instantiate the OPC-DA client object. static readonly EasyDAClient DAClient = new EasyDAClient(); public static void Main1() { var eventHandler = new EasyAENotificationEventHandler(aeClient_Notification); AEClient.Notification += eventHandler; Console.WriteLine("Processing event notifications..."); var subscriptionFilter = new AESubscriptionFilter { Sources = new AENodeDescriptor[] { "Simulation.ConditionState1", "Simulation.ConditionState3" } }; // You can also filter using event types, categories, severity, and areas. int handle = AEClient.SubscribeEvents("", "OPCLabs.KitEventServer.2", 1000, null, subscriptionFilter); // Allow time for initial refresh Thread.Sleep(5 * 1000); // Set some events to active state. try { // The activation below will come from a source contained in a filter and the notification will arrive. DAClient.WriteItemValue("", "OPCLabs.KitServer.2", "SimulateEvents.ConditionState1.Activate", true); // The activation below will come from a source that is not contained in a filter and the notification will not arrive. DAClient.WriteItemValue("", "OPCLabs.KitServer.2", "SimulateEvents.ConditionState2.Activate", true); } catch (OpcException opcException) { Console.WriteLine("*** Failure: {0}", opcException.GetBaseException().Message); return; } Thread.Sleep(10 * 1000); AEClient.UnsubscribeEvents(handle); AEClient.Notification -= eventHandler; } // Notification event handler static void aeClient_Notification(object sender, EasyAENotificationEventArgs e) { Console.WriteLine(); if (!e.Succeeded) { Console.WriteLine("*** Failure: {0}", e.ErrorMessageBrief); return; } Console.WriteLine("Refresh: {0}", e.Refresh); Console.WriteLine("RefreshComplete: {0}", e.RefreshComplete); AEEventData eventData = e.EventData; if (!(eventData is null)) { Console.WriteLine("Event.QualifiedSourceName: {0}", eventData.QualifiedSourceName); Console.WriteLine("Event.Message: {0}", eventData.Message); Console.WriteLine("Event.Active: {0}", eventData.Active); Console.WriteLine("Event.Acknowledged: {0}", eventData.Acknowledged); } } } }
# This example shows how to set the filtering criteria to be used for the event subscription. # # Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . # OPC client and subscriber examples in Python on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-Python . # The QuickOPC package is needed. Install it using "pip install opclabs_quickopc". import opclabs_quickopc import time # Import .NET namespaces. from OpcLabs.EasyOpc import * from OpcLabs.EasyOpc.AlarmsAndEvents import * from OpcLabs.EasyOpc.DataAccess import * from OpcLabs.EasyOpc.OperationModel import * # Notification event handler def notification(sender, e): if not e.Succeeded: print('*** Failure: ', e.ErrorMessageBrief, sep='') return print('Refresh: ', e.Refresh, sep='') print('RefreshComplete: ', e.RefreshComplete, sep='') eventData = e.EventData if eventData is not None: print('Event.QualifiedSourceName: ', eventData.QualifiedSourceName, sep='') print('Event.Message: ', eventData.Message, sep='') print('Event.Active: ', eventData.Active, sep='') print('Event.Acknowledged: ', eventData.Acknowledged, sep='') # Instantiate the OPC-A&E client object. aeClient = EasyAEClient() # Instantiate the OPC-DA client object. daClient = EasyDAClient() # aeClient.Notification += notification print('Processing event notifications...') subscriptionFilter = AESubscriptionFilter() subscriptionFilter.Sources = [ AENodeDescriptor('Simulation.ConditionState1'), AENodeDescriptor('Simulation.ConditionState3'), ] # You can also filter using event types, categories, severity, and areas. handle = IEasyAEClientExtension.SubscribeEvents(aeClient, '', 'OPCLabs.KitEventServer.2', 1000, None, subscriptionFilter) # Allow time for initial refresh time.sleep(5) # Set some events to active state. try: # The activation below will come from a source contained in a filter and the notification will arrive. IEasyDAClientExtension.WriteItemValue(daClient, '', 'OPCLabs.KitServer.2', 'SimulateEvents.ConditionState1.Activate', True) # The activation below will come from a source that is not contained in a filter and the notification will not # arrive. IEasyDAClientExtension.WriteItemValue(daClient, '', 'OPCLabs.KitServer.2', 'SimulateEvents.ConditionState2.Activate', True) except OpcException as opcException: print('*** Failure: ' + opcException.GetBaseException().Message) exit() time.sleep(10) aeClient.UnsubscribeAllEvents() aeClient.Notification -= notification print('Finished.')
' This example shows how to set the filtering criteria to be used for the event subscription. ' ' Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . Imports System.Threading Imports OpcLabs.EasyOpc.AlarmsAndEvents Imports OpcLabs.EasyOpc.AlarmsAndEvents.OperationModel Imports OpcLabs.EasyOpc.DataAccess Imports OpcLabs.EasyOpc.OperationModel Namespace AlarmsAndEvents._AESubscriptionFilter Friend Class Properties _ Private Shared ReadOnly AEClient As New EasyAEClient() _ Private Shared ReadOnly DAClient As New EasyDAClient() Public Shared Sub Main1() Dim eventHandler = New EasyAENotificationEventHandler(AddressOf AEClient_Notification) AddHandler AEClient.Notification, eventHandler Console.WriteLine("Processing event notifications...") Dim subscriptionFilter As New AESubscriptionFilter subscriptionFilter.Sources = New AENodeDescriptor() {"Simulation.ConditionState1", "Simulation.ConditionState3"} ' You can also filter using event types, categories, severity, and areas. Dim handle As Integer = AEClient.SubscribeEvents("", "OPCLabs.KitEventServer.2", 1000, Nothing, subscriptionFilter) ' Allow time for initial refresh Thread.Sleep(5 * 1000) ' Set some events to active state. Try ' The activation below will come from a source contained in a filter and the notification will arrive. DAClient.WriteItemValue("", "OPCLabs.KitServer.2", "SimulateEvents.ConditionState1.Activate", True) ' The activation below will come from a source that is not contained in a filter and the notification will not arrive. DAClient.WriteItemValue("", "OPCLabs.KitServer.2", "SimulateEvents.ConditionState2.Activate", True) Catch opcException As OpcException Console.WriteLine("*** Failure: {0}", opcException.GetBaseException().Message) Exit Sub End Try Thread.Sleep(10 * 1000) AEClient.UnsubscribeEvents(handle) RemoveHandler AEClient.Notification, eventHandler End Sub ' Notification event handler Private Shared Sub AEClient_Notification(ByVal sender As Object, ByVal e As EasyAENotificationEventArgs) Console.WriteLine() If Not e.Succeeded Then Console.WriteLine("*** Failure: {0}", e.ErrorMessageBrief) Exit Sub End If Console.WriteLine("Refresh: {0}", e.Refresh) Console.WriteLine("RefreshComplete: {0}", e.RefreshComplete) If e.EventData IsNot Nothing Then Dim eventData As AEEventData = e.EventData Console.WriteLine("EventData.QualifiedSourceName: {0}", eventData.QualifiedSourceName) Console.WriteLine("EventData.Message: {0}", eventData.Message) Console.WriteLine("EventData.Active: {0}", eventData.Active) Console.WriteLine("EventData.Acknowledged: {0}", eventData.Acknowledged) End If End Sub End Class End Namespace
Rem This example shows how to set the filtering criteria to be used for the event subscription. Rem Rem Find all latest examples here : https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . Option Explicit Dim DAClient: Set DAClient = CreateObject("OpcLabs.EasyOpc.DataAccess.EasyDAClient") Dim AEClient: Set AEClient = CreateObject("OpcLabs.EasyOpc.AlarmsAndEvents.EasyAEClient") WScript.ConnectObject AEClient, "AEClient_" WScript.Echo "Processing event notifications..." Dim ServerDescriptor: Set ServerDescriptor = CreateObject("OpcLabs.EasyOpc.ServerDescriptor") ServerDescriptor.ServerClass = "OPCLabs.KitEventServer.2" Dim SubscriptionFilter: Set SubscriptionFilter = CreateObject("OpcLabs.EasyOpc.AlarmsAndEvents.AESubscriptionFilter") Dim SourceDescriptor1: Set SourceDescriptor1 = CreateObject("OpcLabs.EasyOpc.AlarmsAndEvents.AENodeDescriptor") SourceDescriptor1.QualifiedName = "Simulation.ConditionState1" Dim SourceDescriptor2: Set SourceDescriptor2 = CreateObject("OpcLabs.EasyOpc.AlarmsAndEvents.AENodeDescriptor") SourceDescriptor2.QualifiedName = "Simulation.ConditionState3" SubscriptionFilter.Sources = Array(SourceDescriptor1, SourceDescriptor2) Rem You can also filter using event types, categories, severity, and areas. Dim SubscriptionParameters: Set SubscriptionParameters = CreateObject("OpcLabs.EasyOpc.AlarmsAndEvents.AESubscriptionParameters") SubscriptionParameters.Filter = SubscriptionFilter SubscriptionParameters.NotificationRate = 1000 Dim handle: handle = AEClient.SubscribeEvents(ServerDescriptor, SubscriptionParameters, True, Nothing) Rem Allow time for initial refresh WScript.Sleep 5*1000 WScript.Echo "Set some events to active state..." On Error Resume Next Rem The activation below will come from a source contained in a filter and the notification will arrive. DAClient.WriteItemValue "", "OPCLabs.KitServer.2", "SimulateEvents.ConditionState1.Activate", True Rem The activation below will come from a source that is not contained in a filter and the notification will not arrive. DAClient.WriteItemValue "", "OPCLabs.KitServer.2", "SimulateEvents.ConditionState2.Activate", True If Err.Number <> 0 Then WScript.Echo "*** Failure: " & Err.Source & ": " & Err.Description WScript.Quit End If On Error Goto 0 WScript.Sleep 10*1000 WScript.Echo "Unsubscribing..." AEClient.UnsubscribeEvents handle Rem Notification event handler Sub AEClient_Notification(Sender, e) If Not (e.Succeeded) Then WScript.Echo "*** Failure: " & e.ErrorMessageBrief Exit Sub End If WScript.Echo WScript.Echo "Refresh: " & e.Refresh WScript.Echo "RefreshComplete: " & e.RefreshComplete If Not (e.EventData Is Nothing) Then With e.EventData WScript.Echo "EventData.QualifiedSourceName: " & .QualifiedSourceName WScript.Echo "EventData.Message: " & .Message WScript.Echo "EventData.Active: " & .Active WScript.Echo "EventData.Acknowledged: " & .Acknowledged End With End If End Sub
Copyright © 2004-2024 CODE Consulting and Development, s.r.o., Plzen. All rights reserved. Web page: www.opclabs.com
Send Documentation Feedback. Resources: Knowledge Base, Product Downloads. Technical support: Online Forums, FAQ.Missing some example? Ask us for it on our Online Forums! You do not have to own a commercial license in order to use Online Forums, and we reply to every post.